package fr.afcepf.ai89.esharing.managedbean;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import fr.afcepf.ai89.esharing.entity.Aem;
import fr.afcepf.ai89.esharing.entity.Emprunt;
import fr.afcepf.ai89.esharing.entity.Indisponibilite;
import fr.afcepf.ai89.esharing.entity.InvisibiliteAem;
import fr.afcepf.ai89.esharing.entity.Proprietaire;
import fr.afcepf.ai89.esharing.entity.Valeur;
import fr.afcepf.ai89.esharing.metier.BusinessGestionCompte;
import fr.afcepf.ai89.esharing.metier.BusinessGestionParcAem;
import fr.afcepf.ai89.esharing.metier.IBusinessGestionCompte;
import fr.afcepf.ai89.esharing.metier.IBusinessGestionParcAem;

public class ParcAemManagedBean {
	
	Proprietaire leConnecte = new Proprietaire();
	private List<Aem> aems;
	private IBusinessGestionParcAem busParc = new BusinessGestionParcAem();
	
	public Proprietaire getLeConnecte() {
		return leConnecte;
	}
	
	public void setLeConnecte(Proprietaire leConnecte) {
		this.leConnecte = leConnecte;
	}
	
	public String ajouterAppareil(){
		return "";
	}

	public List<Aem> getAems() {
		return aems;
	}

	public void setAems(List<Aem> aems) {
		this.aems = aems;
	}
	
	public String getValeur(Aem ceci){
		
		Valeur val = new Valeur();
		int i = ceci.getValeurs().lastIndexOf(ceci);
		val = ceci.getValeurs().get(i);
		BigDecimal lastValue = val.getValeurJournaliere();
		String valueString = lastValue.toString();
		return valueString;
		
	}

	public IBusinessGestionParcAem getBusParc() {
		return busParc;
	}

	public void setBusParc(IBusinessGestionParcAem busParc) {
		this.busParc = busParc;
	}
	
	public String getStatut(Aem ceci) {
		
		String status = new String();
		boolean estEmprunte = false;
		
		Date ceJour = new Date();
		
		for (Emprunt em : ceci.getEmprunts()) {
			
			if (em.getDateDebut().before(ceJour) && em.getDateRestitution() == null) {
				
				estEmprunte = true;
				
			}
			
		}
		
		ceJour = new Date();
		
		if (estEmprunte) {
			
			status = "Emprunté";
			
		}
		else {
			
			boolean estInvisible = false;
			
			for (InvisibiliteAem iv : ceci.getInvisibiliteAems()) {
				
				if (iv.getDebutInvisibiliteAem().before(ceJour) && iv.getFinInvisibiliteAem().after(ceJour) && iv.getRetraitInvisibiliteAem() == null) {
					
					estInvisible = true;
					status = "Invisible";
					
				}
				else {
					
					ceJour = new Date();
					
					for (Indisponibilite id : ceci.getIndisponibilites()) {
						
						if (id.getDateDebutIndisponibiliteAem().before(ceJour) && id.getDateFinIndisponibiliteAem().after(ceJour) && id.getDateRetraitIndisponibiliteAem() == null) {
							
							status = "Indisponible";
							
						}
						
					}
					
				}
				
			}
			
		}
		
		return status;
		
	}
	
	public List<Aem> chargerMesAems(int idProp) {
		
		leConnecte.setIdUtilisateur(idProp);
		setAems(busParc.getMesAems(leConnecte));
		
		for (Aem a : getAems()) {
			
			if (a.getValeurs().size() < 1) {
				
				a.getValeurs().add(new Valeur());
				a.getValeurs().get(0).setValeurJournaliere(new BigDecimal(0));
				
			}
			
			//System.out.println("***LOOKIEMEE***");
			//System.out.println(a.getIdAem() + " " + a.getMarque().getMarque() + " " + a.getTypeAem().getTypeAem());
			
		}
		
		return this.getAems();

		
	}
	
	public ParcAemManagedBean () {
		
		chargerMesAems(1);
		
	}
	
}
